﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using Chilis.Marketing.Business.Entity;
using Chilis.Marketing.Common;
using System.Data;

namespace Chilis.Marketing.Data.Access
{
    public class DAArte : ConexionBD
    {
        #region ATRIBUTOS

        private SqlCommand cmd;
        ChilisDataContext chilisDataContext = new ChilisDataContext();

        #endregion

        #region CONSTRUCTOR
        #endregion

        #region PROPIEDADES
        #endregion

        #region METODOS

        /// <summary>
        /// Método              : insertarArte
        /// Descripción         : Inserta Arte en la BD
        /// Fecha Creacion      : 30/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 30/03/2012
        /// </summary>
        /// <param name="campanhaBE">Entidad que representa la Campanha</param>
        /// <param name="transaccionIniciada">Indicador de Transaccion Iniciada</param>
        /// <returns>Retorna el Id del Arte insertado</returns>
        public int? insertarArte(BECampanha campanhaBE,
                                bool transaccionIniciada)
        {
            int? codInsertado = 0;

            try
            {
                BEArte arteBE = null;
                if (campanhaBE != null)
                {
                    if (campanhaBE.Creativo != null)
                    {
                        if (campanhaBE.LArtes != null && campanhaBE.LArtes.Count > 0)
                        {
                            arteBE = campanhaBE.LArtes[0];
                        }
                        else
                        {
                            return codInsertado;
                        }
                    }
                    else
                    {
                        return codInsertado;
                    }
                }
                else
                {
                    return codInsertado;
                }

                int? tempIdCreativo = null;
                if (campanhaBE.Creativo != null)
                {
                    tempIdCreativo = campanhaBE.Creativo.IdTrabajador;
                }

                decimal? tempCosto = (decimal)arteBE.Costo;

                int? tempIdTipoArchivo = null;
                if (arteBE.TipoArchivo != null)
                {
                    tempIdTipoArchivo = arteBE.TipoArchivo.IdTipoArchivo;
                }
                int? tempEstado = (int)arteBE.Estado;

                chilisDataContext.spInsertaArte(ref codInsertado,
                                                campanhaBE.IdCampanha,
                                                tempIdCreativo,
                                                arteBE.Correlativo,
                                                arteBE.Descripcion,
                                                tempCosto,
                                                arteBE.Aprobado,
                                                tempIdTipoArchivo,
                                                arteBE.TituloArchivo,
                                                arteBE.ContenidoArchivo,
                                                tempEstado,
                                                arteBE.Usuario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
            }
            return codInsertado;
        }


        /// <summary>
        /// Método              : modificarArte
        /// Descripción         : Modifica Arte en la BD
        /// Fecha Creacion      : 30/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 30/03/2012
        /// </summary>
        /// <param name="campanhaBE">Entidad que representa el Arte</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool modificarArte(BECampanha campanhaBE,
                                  bool transaccionIniciada)
        {
            bool respuesta = false;

            try
            {
                BEArte arteBE = null;
                if (campanhaBE != null)
                {
                    if (campanhaBE.Creativo != null)
                    {
                        if (campanhaBE.LArtes != null && campanhaBE.LArtes.Count > 0)
                        {
                            arteBE = campanhaBE.LArtes[0];
                        }
                        else
                        {
                            return respuesta;
                        }
                    }
                    else
                    {
                        return respuesta;
                    }
                }
                else
                {
                    return respuesta;
                }

                int? tempIdCreativo = null;
                if (campanhaBE.Creativo != null)
                {
                    tempIdCreativo = campanhaBE.Creativo.IdTrabajador;
                }

                decimal? tempCosto = (decimal)arteBE.Costo;

                int? tempIdTipoArchivo = null;
                if (arteBE.TipoArchivo != null)
                {
                    tempIdTipoArchivo = arteBE.TipoArchivo.IdTipoArchivo;
                }
                int? tempEstado = (int)arteBE.Estado;

                chilisDataContext.spModificaArte(arteBE.IdArte,
                                                 campanhaBE.IdCampanha,
                                                 tempIdCreativo,
                                                 arteBE.Correlativo,
                                                 arteBE.Descripcion,
                                                 tempCosto,
                                                 arteBE.Aprobado,
                                                 tempIdTipoArchivo,
                                                 arteBE.TituloArchivo,
                                                 arteBE.ContenidoArchivo,
                                                 tempEstado,
                                                 arteBE.Usuario);

                respuesta = true;
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : eliminarArte
        /// Descripción         : Elimina Arte en la BD
        /// Fecha Creacion      : 30/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 30/03/2012
        /// </summary>
        /// <param name="arteBE">Entidad que representa el Arte</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool eliminarArte(BEArte arteBE,
                                 bool transaccionIniciada)
        {
            bool respuesta = true;

            try
            {
                int? tempEstado = (int)arteBE.Estado;

                chilisDataContext.spEliminaArte(arteBE.IdArte,
                                                tempEstado,
                                                arteBE.Usuario);
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }


        /// <summary>
        /// Método              : aprobarArte
        /// Descripción         : Aprueba Arte en la BD
        /// Fecha Creacion      : 30/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 30/03/2012
        /// </summary>
        /// <param name="arteBE">Entidad que representa el Arte</param>
        /// <param name="transaccionIniciada">Indicador de Transacción Iniciada</param>
        /// <returns>Retorna un booleano que indica si se actualizo el registro</returns>
        public bool aprobarArte(BEArte arteBE,
                                bool transaccionIniciada)
        {
            bool respuesta = true;

            try
            {
                int? tempEstado = (int)arteBE.Estado;

                chilisDataContext.spAprobarArte(arteBE.IdArte,
                                                arteBE.Usuario);
            }
            catch (Exception ex)
            {
                respuesta = false;
                throw ex;
            }
            finally
            {
            }
            return respuesta;
        }

        /// <summary>
        /// Método              : obtenerArtePorId
        /// Descripción         : Obtiene la Entidad Arte
        /// Fecha Creacion      : 30/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 30/03/2012
        /// </summary>
        /// <param name="idArte">Id Arte</param>
        /// <returns>Retorna el Objeto que representa la Entidad Arte</returns>
        public BEArte obtenerArtePorId(int idArte)
        {
            DataSet ds = null;
            BEArte arteBE = null;
            this.Conexion();

            cmd = new SqlCommand();
            cmd.Connection = this.connection;
            this.AbrirConexion();

            cmd.CommandText = "spSelArtePorId";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Clear();
            cmd.Parameters.Add(new SqlParameter("@pIdArte", idArte));

            try
            {
                cmd.ExecuteNonQuery();

                ds = new DataSet();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);

                if (ds != null)
                {
                    arteBE = this.poblarArte(ds.Tables[(int)Constantes.ARTE_DATOS.DATOS_GENERALES], arteBE);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
                this.CerrarConexion();
            }
            return arteBE;
        }

        /// <summary>
        /// Método              : poblarArte
        /// Descripción         : Se encarga de poblar los datos obtenidos en la Entidad Arte
        /// Fecha Creacion      : 30/03/2012
        /// Creador             : TP2
        /// Ultimo en modificar : TP2
        /// Ultima modificacion : 30/03/2012
        /// </summary>
        /// <param name="dtArte">Resultado de la Búsqueda por Id</param>
        /// <param name="arteBE">Entidad que representa el Arte</param>
        /// <returns>Retorna el Objeto que representa la Entidad Arte</returns>
        public BEArte poblarArte(DataTable dtArte, BEArte arteBE)
        {
            if (dtArte != null && dtArte.Rows.Count > 0)
            {
                if (arteBE == null)
                {
                    arteBE = new BEArte();
                }

                DataRow drArte = dtArte.Rows[0];
                if (drArte["id_arte"] != DBNull.Value)
                {
                    int tempIdArte = 0;
                    int.TryParse(drArte["id_arte"].ToString(), out tempIdArte);
                    arteBE.IdArte = tempIdArte;
                }

                if (drArte["correlativo"] != DBNull.Value)
                {
                    int tempCorrelativo = 0;
                    int.TryParse(drArte["correlativo"].ToString(), out tempCorrelativo);
                    arteBE.Correlativo = tempCorrelativo;
                }
                if (drArte["descripcion"] != DBNull.Value)
                {
                    arteBE.Descripcion = drArte["descripcion"].ToString();
                }
                if (drArte["costo"] != DBNull.Value)
                {
                    double tempCosto = 0;
                    if (double.TryParse(drArte["costo"].ToString(), out tempCosto))
                    {
                        arteBE.Costo = tempCosto;
                    }
                }
                if (drArte["aprobado"] != DBNull.Value)
                {
                    int tempAprobado = 0;
                    int.TryParse(drArte["aprobado"].ToString(), out tempAprobado);
                    arteBE.Aprobado = tempAprobado;
                }
                if (drArte["descripcion_aprobado"] != DBNull.Value)
                {
                    arteBE.DescripcionAprobado = drArte["descripcion_aprobado"].ToString();
                }
                if (drArte["id_tipo_archivo"] != DBNull.Value)
                {
                    int tempIdTipoArchivo = 0;
                    int.TryParse(drArte["id_tipo_archivo"].ToString(), out tempIdTipoArchivo);
                    arteBE.TipoArchivo = new BETipoArchivoDisponible();
                    arteBE.TipoArchivo.IdTipoArchivo= tempIdTipoArchivo;

                    if (drArte["extension"] != DBNull.Value)
                    {
                        arteBE.TipoArchivo.Extension = drArte["extension"].ToString();
                    }
                    if (drArte["tipo_mime"] != DBNull.Value)
                    {
                        arteBE.TipoArchivo.TipoMime = drArte["tipo_mime"].ToString();
                    }
                }
                if (drArte["titulo_archivo"] != DBNull.Value)
                {
                    arteBE.TituloArchivo = drArte["titulo_archivo"].ToString();
                }
                if (drArte["contenido_archivo"] != DBNull.Value)
                {
                    arteBE.ContenidoArchivo = (byte[])drArte["contenido_archivo"];
                }
                if (drArte["estado"] != DBNull.Value)
                {
                    arteBE.Estado = Common.Constantes.ObtenerEnumEstado(drArte["estado"].ToString());
                }
            }
            return arteBE;
        }

        #endregion
    }
}
